package com.service.infoEntry.dao;

import com.service.infoEntry.entity.ProgrammeInfo;
import com.service.infoEntry.entity.ProgrammeInfo2;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ProgrammeDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    ProgrammeInfo2 queryById(String id);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<ProgrammeInfo2> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param programmeInfo2 实例对象
     * @return 对象列表
     */
    List<ProgrammeInfo2> queryAll(ProgrammeInfo2 programmeInfo2);

    /**
     * 新增数据
     *
     * @param programmeInfo2 实例对象
     * @return 影响行数
     */
    int insert(ProgrammeInfo2 programmeInfo2);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<ProgrammeInfo2> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<ProgrammeInfo2> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities List<ProgrammeInfo2> 实例对象列表
     * @return 影响行数
     */
    int insertOrUpdateBatch(@Param("entities") List<ProgrammeInfo2> entities);

    /**
     * 修改数据
     *
     * @param programmeInfo2 实例对象
     * @return 影响行数
     */
    int update(ProgrammeInfo2 programmeInfo2);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(String id);
    /**
     * 立项
     * @param programmeInfo
     */
    void setUpProgramme(ProgrammeInfo programmeInfo);

    /**
     * 项目跟踪
     * @param programmeInfo
     */
    void updateProgrammeInfo(ProgrammeInfo programmeInfo);

    /**
     * 查询团队下所有项目
     * @param teamId
     * @param userId
     * @param programmeStatus
     * @return
     */
    List<ProgrammeInfo> queryProgrammeOfTeam(@Param("teamId") String teamId,@Param("userId") String userId,@Param("programmeStatus") Integer programmeStatus);

    /**
     * 通过项目id查询分组下某一个项目
     * @param programmeId
     * @return
     */
    ProgrammeInfo queryProgrammeOfTeamByNo(@Param("programmeId") String programmeId);

    /**
     * 想过项目编号查询项目
     * @param no
     * @return
     */
    ProgrammeInfo queryProgrammeByNo(String no);

    /**
     * 关闭项目
     * @param no
     * @param status
     */
    void closeProgramme(@Param("no") String no,@Param("status") Integer status);

    /**
     * 通过关键字模糊查询项目信息
     * @param teamId
     * @param keyword
     * @param userId
     * @param programmeStatus
     * @return
     */
    List<ProgrammeInfo> queryProgrammeByKeyWord(@Param("teamId") String teamId,@Param("keyword") String keyword,@Param("userId") String userId,@Param("programmeStatus") Integer programmeStatus);

    /**
     * 通过项目id查询项目
     * @param programmeId
     * @return
     */
    String queryAccessoryByProgrammeId(String programmeId);

    /**
     * 保存附件路径
     * @param programmeId
     * @param accessoryUrls
     */
    void addAccessory(@Param("programmeId") String programmeId, @Param("accessoryUrls") String accessoryUrls);

    /**
     * 查询项目下所有附件
     * @param programmeId
     * @return
     */
    String queryAccessory(@Param("programmeId") String programmeId);

    /**
     * 更新项目下的附件为s（如:a.docx,b.docx）
     * @param programmeId
     * @param accessories
     */
    void updateAccessory(@Param("programmeId")String programmeId,@Param("accessories") String accessories);

    /**
     * 通过id查询项目
     * @param programmeId
     * @return
     */
    ProgrammeInfo queryProgrammeById(String programmeId);

    /**
     * queryProgrammesByTeamId
     * @param teamId
     * @param userId
     * @return
     */
    List<ProgrammeInfo> queryProgrammesByTeamId(@Param("teamId") String teamId,@Param("userId") String userId);

    /**
     * queryAllNo
     * @param teamId
     * @return
     */
    List<String> queryAllNo(String teamId);
    /**
     * 根据项目状态查询项目数据
     * @param teamId
     * @param userId
     * @param status
     * @param programmeStatus
     * @return
     */
    List<ProgrammeInfo> queryProgrammeByStatus(@Param("teamId") String teamId, @Param("userId") String userId, @Param("status") Integer status, @Param("programmeStatus") Integer programmeStatus);

    /**
     * queryAllProgrammeInTeam
     * @param teamId
     * @return
     */
    List<ProgrammeInfo> queryAllProgrammeInTeam(@Param("teamId") String teamId);

    /**
     * queryProgramme
     * @param teamId
     * @param userId
     * @param name
     * @param status
     * @param programmeStatus
     * @return
     */
    List<ProgrammeInfo> queryProgramme(@Param("teamId") String teamId, @Param("userId") String userId, @Param("name") String name, @Param("status") Integer status, @Param("programmeStatus") Integer programmeStatus);

    /**
     * queryAllByDate
     * @return
     */
    List<ProgrammeInfo> queryAllByDate();

    /**
     * 删除项目
     * @param programmeNo
     * @return
     */
    int deleteProgramme(String programmeNo);

}
